<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 短路运算的原理：当有多个表达式（值）时，左边的表达式值可以确定结果时，就不再继续运算右边的表达式的值

        //逻辑与（&&）
        // 如果第一个表达式1为真，则返回表达式2；如果表达式2为真，则返回表达式1
        console.log(123 && 456); //456
        console.log(0 && 456); //0
        console.log(0 && 1 + 2 && 456 * 56789); //0
        console.log(123 && 456 && 345); //345
        console.log(123 && null && 0); //null
        // 总结：在逻辑与中当运算到一个假的表达式就可以确定结果为假了，后面的就短路不运算了，直接返回假的表达式；当没有假的表达式就会运算完最后一个，返回最后一个表达式

        //逻辑或（||）
        // 总结：在逻辑或中运算到一个真的表达式就可以确定结果为真了，后面的短路不运算了，直接返回真的表达式；当没有真的表达式就会运算完最后一个，再返回最后一个表达式
        console.log(123 || 456 || 789); //123
        console.log(0 || NaN || 456); //456
        var num = 0;
        console.log(789 || ++num); //789
        console.log(num); //0  表示上面代码只执行到了789就短路了，没有执行++num
    </script>
</head>

<body>

</body>

</html>